In performance testing, there is a common practice of examining the speed, durability, and/or reliability of a tested software feature, component, or system. A performance iteration is a single operation or set of multiple operations that is defined to determine performance of the software feature, component, or system. A performance test executes this iteration one or more times to determine the speed, durability, and/or reliability of the software feature, component, or system. The process of executing the iterations is called load generating and the software tool that executes the performance iterations is called a load generator.
Load generators can be used to generate a load to test the functional behavior and measure performance of the tested software feature, component, or system. Load generators can be used to simulate a heavy load on a server, network, or object to test its strength, or to analyze overall performance under different load types. Conventional load generators can test the performance of various types of software features, components, or systems, such as web servers (e.g., Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS), Simple Object Access Protocol (SOAP) servers, database servers, Lightweight Directory Access Protocol (LDAP) servers, Java Message Service (JMS) servers, mail servers (e.g., Post Office Protocol 3 (POP3), POP secure (P0P3S) and Internet Message Access Protocol (IMAP), IMAP Secure (IMAPS) servers).
Some conventional load generators can provide a multi-threading framework that allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups. The typical load generating case in a multi-threaded environment performs the following: 1) receives user input that specifies test attributes as a number of concurrent threads that execute iterations, and the number of iterations per thread; 2) runs the load generator; and 3) quantifies the performance of the tested software feature, component, or system. These conventional load generators can be configured with pluggable timers for various load statistics, but do not receive an input to indicate an overall time duration for the performance test. These conventional load generators cannot reliably generate load using multiple concurrent threads during performance testing for long periods of time, such as days, weeks, months, etc. with limited available resources, such as memory.